#include <iostream>
using namespace std;

struct SqStack{     // 顺序栈(假定栈的数据元素类型为int)
    int* base;       // 栈底的指针(数组的地址, base一般是不用修改的)
    int top;       // 栈顶的指针（索引）（指向栈顶元素的上面的那个空的位置）
    int stackSize;  // 栈的容量（数组的大小）
    bool init(){
        stackSize = 100;                // 栈大小的默认值
        base = new int[stackSize];      // 申请数组空间
        top = 0;                     // 空栈
    }
    bool isEmpty() { return top == 0; }
    bool isFull() { return top == stackSize; }
    bool push(int e){
        if(isFull()) return false;
        base[top] = e;       // 把新元素e压入栈中
        top++;          // 更新栈顶元素
    }
    bool pop(int &e){
        if(isEmpty()) return false;
        top--;
        e = base[top];
    }
    bool peek(int &e) {
        if(isEmpty()) return false;
        e = base[top - 1];
    }
    void print(){
        cout << "Base ==> [";
        for(int i = 0, len = top; i < len; i++){
            cout << base[i] << ", ";
        }
        cout << "] <== Top\n";
    }

};

int main()
{    
    SqStack myStack;    // 定义一个栈的变量
    myStack.init();
    int a = 53;
    int m = a;
    while(m!=0)
    {
        int r = m%2;    // 求余
        myStack.push(r);
        m = m/2;        
    }
    while(1){
        int ele;
        if(myStack.pop(ele))
            cout << ele;
        else break;
    }
    return 0;
}